package dominioDAO;

import hbt.HibernateDAO;
import hbt.HibernateUtil;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import dominioEntity.ItemCotizacion;
import dominioEntity.ItemListaPrecios;
import dominioEntity.OrdenCompraProveedor;
import dominioEntity.Rodamiento;


// Cliente lado Servidor DAO (Persistencia)

public class OrdenCompraProveedorDAO{
	private static OrdenCompraProveedorDAO instancia ;
	private static SessionFactory sf;
	private static Session session;
	
	public static OrdenCompraProveedorDAO getInstancia() {
		if(instancia == null){
			instancia = new OrdenCompraProveedorDAO();
		} 
		return instancia;
	}
	public OrdenCompraProveedorDAO()
	{
		sf = HibernateUtil.getSessionFactory();
	}
	
	protected Session getSession(){
		if(session == null || !session.isOpen()){
			session = sf.openSession();
		}
		return session;
	}
	
	protected void closeSession()
	{
		if(session.isOpen())
		{
			session.close();
		}
	}
	public OrdenCompraProveedor buscarOrdenesCompraProveedor(OrdenCompraProveedor oc)
	{
		String query = "from OrdenCompraProveedor oc where oc.proveedor=:proveedor and oc.fechaEmision=:fechaEmision";
		OrdenCompraProveedor aux = (OrdenCompraProveedor)HibernateDAO.getInstancia().propiedades(query, oc);
		return aux;
	}

	public void persistirOrdenesCompraProveedor(List<OrdenCompraProveedor> ordenes)
	{
		HibernateDAO.getInstancia().persistList2(ordenes);
		
	}
	
	public ItemListaPrecios buscarItemLista(Integer id, Rodamiento rod)
	{
		String query = "select il from OrdenCompraProveedor oc join oc.itemsOC itemOC join itemOC.itemListaPrecio il join il.rodamiento rod where oc.idOC="+id
				+" and rod.descripcion=:descripcion and rod.nSerie=:nSerie and rod.prefijo=:prefijo and rod.sufijo=:sufijo";
		ItemListaPrecios aux = (ItemListaPrecios)HibernateDAO.getInstancia().propiedades(query, rod);
		
		return aux;
	}
	public OrdenCompraProveedor buscarOrdenCompraProveedorPorId(Integer id)
	{
		String query = "from OrdenCompraProveedor oc where oc.idOC="+id;
		OrdenCompraProveedor op = (OrdenCompraProveedor)HibernateDAO.getInstancia().totalizador(query);
		return op;
	}
	
	@SuppressWarnings("unchecked")
	public List<ItemCotizacion> buscaItemCotizacionOrden(Integer id)
	{
		String query = "select item from OrdenCompraProveedor oc join oc.itemCotizacion item where oc.idOC="+id;		
		List<ItemCotizacion> aux = (List<ItemCotizacion>)HibernateDAO.getInstancia().getLista(query);
		return aux;
	}
	
}

